package bancosys.tec.security.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Anotação para definir a Tarefa associada a uma chamada de Metodo
 * @author julien
 *
 */
@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME)
public @interface Task {
	
	/**
	 * O nome da Tarefa
	 */
	String nome() default "";
	
	/**
	 * Indica se deve validar permissão de acesso aos parâmetros
	 * do método que implementam a interface SecuredEntity.
	 * 
	 * Se algum parâmetro for uma Collection ou um Array os mesmos
	 * serão percorridos.
	 * 
	 * Se algum parâmetro não for validado uma AuthorizationException
	 * é lançada.
	 */
	boolean checkParams() default false;
	
	/**
	 * Indica se deve validar permissão de acesso ao retorno
	 * do método (se este implementar a interface SecuredEntity).
	 * 
	 * Se o retorno for uma Collection ou um Array os mesmos serão
	 * percorridos e entradas que não validarem permissão serão 
	 * retiradas do retorno.
	 * 
	 * Nos outros casos, se não validar o retorno faz voltar null.
	 */
	boolean checkReturn() default false;
}
